gets関数は、標準入力から1行入力します。この関数は入力データの長さを知ることなく入力するため、用意したバッファの終わりを越えて書き込む可能性があります。特に問題がなければ、fgets関数を使用した方がよいでしょう。
#include <stdio.h>
char *gets(char *s);
sは入力したデータを格納する領域を指定します。
*streamはfopen関数で取得した、ファイルポインタを指定します。
戻り値として、正常に入力できた場合は入力データ(第1引数のsと同じ)が、ファイルの終わりや、エラーの場合はNULLの値を返します。
gets関数は入力したデータの末尾の改行文字やEOFは、ヌル文字(’\0’)に置き換えます。
プログラム 例
#include <stdio.h> #include <string.h> #define SIZE 1024 int main(int argc, char **argv) { FILE *fp; char buff[SIZE]; int return_code = 0; if (argc == 2) { if ((fp = fopen(*(argv + 1), 'w')) != NULL) { while(gets(buff) != NULL) { /* 改行文字を付加して出力 */ fputs(strcat(buff, '\n'), fp); } fclose(fp); } else { printf('ファイルのオープンに失敗しました\'); return_code = 1; } } else { printf('実行時引数の数が不当です\n'); return_code = 2; } return return_code; }
例の実行結果
$ ./gets.exe temp1.txt Hello World!!. Bye. $ $ cat temp1.txt Hello World!!. Bye. $